---
title: ^0.13.0에서 ^0.14.0
version: 1
---

Riverpod `0.14.0` 버전이 출시되면서, [StateNotifierProvider] 사용 구문이 변경되었습니다.
(자세한 설명은 https://github.com/rrousselGit/riverpod/issues/341 참조)

전체 문서에 대해서는 다음 [StateNotifier]를 참조하세요:

```dart
class MyModel {}

class MyStateNotifier extends StateNotifier<MyModel> {
  MyStateNotifier(): super(MyModel());
}
```

## 변경사항

- [StateNotifierProvider]는 추가 제네릭 매개변수(extra generic parameter)를 받는데, 이 매개변수는 [StateNotifier]의 상태 타입이어야 합니다.

  이전:

  ```dart
  final provider = StateNotifierProvider<MyStateNotifier>((ref) {
    return MyStateNotifier();
  });
  ```

  변경후:

  ```dart
  final provider = StateNotifierProvider<MyStateNotifier, MyModel>((ref) {
    return MyStateNotifier();
  });
  ```

- [StateNotifier]를 얻으려면, 이제 `myProvider`가 아닌 `myProvider.notifier`를 읽어야 합니다:

  이전:

  ```dart
  Widget build(BuildContext context, ScopedReader watch) {
    MyStateNotifier notifier = watch(provider);
  }
  ```

  변경후:

  ```dart
  Widget build(BuildContext context, ScopedReader watch) {
    MyStateNotifier notifier = watch(provider.notifier);
  }
  ```

- [StateNotifier]의 상태를 수신(listen)하려면, 이제 `myProvider.state` 대신 `myProvider`를 읽어야 합니다:

  이전:

  ```dart
  Widget build(BuildContext context, ScopedReader watch) {
    MyModel state = watch(provider.state);
  }
  ```

  변경후:

  ```dart
  Widget build(BuildContext context, ScopedReader watch) {
    MyModel state = watch(provider);
  }
  ```

## 마이그레이션 도구를 사용하여 프로젝트를 새 구문으로 자동 업그레이드하기

버전 0.14.0에서는 프로젝트를 마이그레이션하는 데 도움이 되는 Riverpod용 명령줄 도구가 출시되었습니다.

### 명령줄 설치하기

마이그레이션 도구를 설치하려면 다음을 실행합니다:

```sh
dart pub global activate riverpod_cli
```

이제 실행할 수 있을 것입니다:

```sh
riverpod --help
```

### 사용법

이제 명령줄이 설치되었으므로 사용을 시작할 수 있습니다.

- 먼저 터미널에서 마이그레이션하려는 프로젝트를 엽니다.
- **Do not** Riverpod을 업그레이드하지 마세요.  
  마이그레이션 도구가 Riverpod의 버전을 업그레이드해 줍니다.
- 프로젝트에 오류가 없는지 확인합니다.
- 실행:
  ```sh
  riverpod migrate
  ```

그러면 도구가 프로젝트를 분석하고 변경 사항을 제안합니다. 예를 들면 다음과 같습니다:

```diff
Widget build(BuildContext context, ScopedReader watch) {
-  MyModel state = watch(provider.state);
+  MyModel state = watch(provider);
}

Accept change (y = yes, n = no [default], A = yes to all, q = quit)? 
```

변경을 수락하려면 <kbd>Y</kbd>를 누르면 됩니다. 변경을 거부하려면 <kbd>n</kbd>을 누르세요.

[statenotifierprovider]: https://pub.dev/documentation/hooks_riverpod/latest/legacy/StateNotifierProvider-class.html
[statenotifier]: https://pub.dev/documentation/state_notifier/latest/state_notifier/StateNotifier-class.html
